/*
@author: zwz
@file: ATM.go
@time: 2022/12/2 0002 14:55:13
*/
package main

//ATM模拟系统，银行取钱，存款事项,取款，查询事项
//# atm存取款
//# 登录　注册
//# 存钱　取钱　查看余额
//
//# 分析类的属性和方法
//# ATM 用户
//# ATM --》 属性：银行、余额
//#         方法：存钱、取钱、查询用户余额
//# 用户 --》 属性：用户名、密码、余额

import "fmt"

var money int
var users = make(map[string]User)

//定义User结构体
type User struct {
	name string
	passwd string
	balance int
}

//定义ATM结构体
type ATM struct {
	bank string
	balance int
}

//存款
func (atm *ATM) save_money(user User, money int) {
	user.balance += money
	atm.balance += money
	users[user.name] = user
	fmt.Printf("存款成功！本次存入%d元，您的账户余额为：%d元\n", money, user.balance)
}

//取款
func (atm *ATM) draw_money(user User, money int) {
	if money > user.balance{
		fmt.Println("余额不足！")
	}else if money > atm.balance {
		fmt.Println("ATM余额不足！")
	}else {
		user.balance -= money
		atm.balance -= money
		users[user.name] = user
		fmt.Printf("取款成功！本次取款%d元，余额为%d元\n", money, user.balance)
	}
}

//yue查询
func (atm *ATM) check_balance(user User) {
	fmt.Printf("%s的余额为：%d\n", user.name, user.balance)
}

func main() {
	var op string
	var op1 string
	var name string
	var passwd string
	var balance int

	for true {
		fmt.Println("1、登录\n2、注册\n3、退出")
		fmt.Println("请选择您的操作：")
		fmt.Scanln(&op)
		if op == "1" {
			fmt.Println("请输入用户名：")
			fmt.Scanln(&name)
			fmt.Println("请输入密码：")
			fmt.Scanln(&passwd)
			if _, ok := users[name]; ok && passwd == users[name].passwd {
				fmt.Println("登录成功")
				atm := ATM{"中国建设银行", 50000000}
				fmt.Println("欢迎来到", atm.bank)
				for true {
					fmt.Println("1、存款\n2、取款\n3、余额查询\n4、退出")
					fmt.Println("请输入您的选择：")
					fmt.Scanln(&op1)
					if op1 == "1"{
						fmt.Println("请输入存款金额：")
						fmt.Scanln(&money)
						atm.save_money(users[name], money)
					}else if op1 == "2" {
						fmt.Println("请输入取款金额：")
						fmt.Scanln(&money)
						atm.draw_money(users[name], money)
					}else if op1 == "3" {
						atm.check_balance(users[name])
					}else if op1 == "4" {
						break
					}else {
						fmt.Println("输入不合法！")
					}
				}
			}
		}else if op == "2" {
			fmt.Println("请输入用户名：")
			fmt.Scanln(&name)
			fmt.Println("请输入密码：")
			fmt.Scanln(&passwd)
			fmt.Println("初始充值金额：")
			fmt.Scanln(&balance)
			user := User{name, passwd, balance}
			users[name] = user
		}else if op =="3" {
			break
		}else {
			fmt.Println("输入不合法！")
		}
	}
}
